package org.dromara.patrol.domain;

import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.patrol.domain.model.ExecuteRule;
import org.dromara.patrol.domain.model.PatrolExecutors;

import java.io.Serial;
import java.util.List;

/**
 * 巡店管理-巡店任务（实时、现场、录像，不包含自检任务）配置对象 patrol_task
 *
 * @author Chan
 * @date 2024-03-21
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "patrol_task", autoResultMap = true)
public class PatrolTask extends TenantEntity {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 任务id
     */
    @TableId(value = "task_id")
    private Long taskId;

    /**
     * 任务名称
     */
    private String name;

    /**
     * 创建人（每次新增任务时，查询此人最新一次的任务记录，优化体验）
     */
    private Long creator;

    /**
     * 任务编号自动生成（如：XD202403070001，XD202403070002）
     */
    private String code;

    /**
     * 报告通知人ids
     */
    private String handler;

    /**
     * 周期任务id
     */
    private Long cycleTaskId;

    /**
     * 创建时间
     */
    private Long createdTime;

    /**
     * 巡检任务开始时间（本表字段task_sub_type=PATROL_REALTIME||PATROL_LIVE 必填）
     */
    private Long expectStartTime;

    /**
     * 巡检任务完成时间（本表字段task_sub_type=PATROL_REALTIME|| PATROL_LIVE必填）
     */
    private Long expectFinishTime;

    /**
     * 任务状态（字典表：PROCESSING 执行中，TODO 待处理，FINISH 已完成）
     * @see org.dromara.common.core.enums.patrol.TaskFinishStatus
     */
    private String status;

    /**
     * 任务类型（字典表：PATROL 巡店，SELF自检）
     * @see org.dromara.common.core.enums.patrol.TaskType
     */
    private String taskType;

    /**
     * 任务子类型（字典表：PATROL_REALTIME 实时巡店，PATROL_LIVE 现场巡店，PATROL_VIDEO 录像巡店）
     * @see org.dromara.common.core.enums.patrol.TaskSubType
     */
    private String taskSubType;

    /**
     * 巡店模板id（）
     */
    private Long templateId;

    /**
     * 备注
     */
    private String remark;

    /**
     * 默认否（0是 1否）
     */
    private String executable;

    /**
     * 录像巡店开始时间（本表字段task_sub_type=PATROL_VIDEO 必填）
     */
    private Long videoStartTime;

    /**
     * 录像巡店结束时间（本表字段task_sub_type=PATROL_VIDEO 必填）
     */
    private Long videoEndTime;

    /**
     * 重复类型（字典表：NO_REPEAT 不重复，DAILY 每天，WEEKLY 每周，MONTHLY 每月）
     * @see org.dromara.common.core.enums.patrol.RepeatType
     */
    private String cycleType;

    /**
     * 模板规则（字典表：COMMON 使用统一模板，CUSTOMIZE 自主选择模板）
     */
    private String templateRule;

    /**
     * 执行规则{
        "cycleType": "NO_REPEAT",
        "weeklyRule": null,
        "monthlyRule": null,
        "executeDateStart": "2024-03-11",
        "executeDateEnd": "2024-03-12",
        "executeTimeStart": "00:00:00",
        "executeTimeEnd": "23:59:59"
    }
     */
    @TableField(typeHandler = com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)
    private ExecuteRule executeRule;

    /**
     * 巡检门店id、人员相关json[
        {
            "storeId": "6636b81c-d561-11ee-b4bb-1dbe6922f4cd",
            "storeName": null,
            "executors": [
                {
                    "executor": "cd9729fc-d79c-11ee-b05d-83ebc9b829a7",
                    "executorName": null
                }
            ],
            "departmentId": null,
            "departmentName": null,
            "roleId": null,
            "roleName": null
        }
    ]
     */
    @TableField(typeHandler = com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)
    private List<PatrolExecutors> patrolExecutors;

    /**
     * 版本号（字典表：V1，V2）
     */
    private String ver;

    /**
     * 子任务id（mainTask=true）
     */
    private Long mainSubtaskId;


}
